package com.hanamaki.study.day01;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.support.ui.Select;
import org.testng.Assert;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;

import java.util.ArrayList;

public class FireFoxDriverTestNg03 {

    /* WebDriver 代表 浏览器 对象 */
    WebDriver driver;

    @BeforeClass
    public void setUp() {
        /* 1. 注册驱动的位置  */
        System.setProperty("webdriver.gecko.driver", "C:\\Program Files\\Mozilla Firefox\\geckodriver.exe");

        /* 2, 注册驱动 */
        driver = new FirefoxDriver();

    }

    /**
     * 对 物业名称文本框进行  元素定位并且实现双击操作
     */
    @Test
    public void doubleClick() {
        /* 打开网址测试  */
        driver.get("file:///E:/testhtml/exam/House.html");

        /* 使用 css的方式 来进行元素定位  */
        WebElement elementByCssSelector = driver.findElement(By.cssSelector("input.uname"));

        /* 想要实现双击的操作 首先 需要使用 事件  */
        Actions actions = new Actions(driver);
        actions.doubleClick(elementByCssSelector).build().perform();

    }


    /**
     * 对  物业类别 下拉列表框 进行  选择某条选项
     */
    @Test
    public void select_option() {
        /* 打开网址测试  */
        driver.get("file:///E:/testhtml/exam/House.html");

        /* 使用 xpath 的方式  来进行元素定位  获得  办公用房 标签的 元素 位置  实现点击操作   */
        WebElement element = driver.findElement(By.xpath("//option[@value='c']"));
        element.click();

        boolean selected = element.isSelected();
        System.out.println(selected);

        /* 这一个  断言是判断  实际值 是否和 预期值 一致  如果一致 结果通过 */
//        Assert.assertEquals(selected, false);

        /*  assertTrue 此断言的 方式  是 判断 参数参数是否为  boolean类型的 true  如果是 就是通过 */
        Assert.assertTrue(selected);

    }

    /**
     * 使用 集合容器的 方式 将 下拉列表框中的所有的 选项 添加到集合中 选择某一条数据
     */
    @Test
    public void select() {
        driver.get("file:///E:/testhtml/exam/House.html");
        /* 使用 by.name的方式 获取 元素 下拉列表框进行 元素定位  */
        WebElement list1 = driver.findElement(By.name("list1"));
        /* 如果获取的元素是一个 下拉列表框  可以将 当前获取出来的 元素添加到 select 容器中 */
        Select select = new Select(list1);
        /* 因为  将 元素 放在了 集合容器中 ，可以同 集合容器中的方法 来选择某一个 选项 */
        /* 判断下拉列表框中的元素是否支持多选 */
        System.out.println(select.isMultiple() == true ? "支持多选" : "不支持多选");

        /* 如果想要选择 在下拉列表框中的 第一个选项（商场） 有以下几种方式： */
        /* 通过 选项在容器中的下标来选择 下标 从 0  开始 */
//        select.selectByIndex(0);
        /* 通过 选项的html 中的value属性的值来进行元素选项的 选择 */
//        select.selectByValue("a");
        select.selectByVisibleText("商场");

        /* 如果下拉列表框 是单选状态 可以获得出 已经选中的元素的信息 */
        WebElement firstSelectedOption = select.getFirstSelectedOption();
        /* 如果是一个 元素  那么可以获得此元素中的 指定属性的值 */
        String value = firstSelectedOption.getAttribute("value");
        System.out.println(value);
        /* 获得 标签 实现显示在页面中的文本值 */
        System.out.println(firstSelectedOption.getText());


    }

}
